home *** CD-ROM | disk | FTP | other *** search
/ Mind Run / Mind Run (1991)(Crealude)(FR)(M6)[!][CFI MINDRUM 91148].iso / re48.amos / re48.amosSourceCode
AMOS Source Code  |  2008-12-15  |  41KB  |  1,147 lines

  1. '                            Re48                       16  4  91    
  2. Set Buffer 20 : Close Workbench : Close Editor : Randomize Timer
  3. If Exist("CFI:") : Dir$="CFI:" : Else Dir$="GIGUNA:GAMOS/" : End If 
  4. '
  5. Dim TPTS(6),ZBUT(28),BBUT(28),ZBI(36),RSV(16,2),H(28),V(28),CPL(8,3)
  6. Dim XB(2),YB(2),Z(36),CUR(12,9,2),GAM$(12),PREF(5),SON(14,6,3),F$(20)
  7. Global TEST,TPTS(),TEMPS,PTS,APTS,NBK,NBI,NB,NBUT,ZBUT(),BBUT(),DIFF
  8. Global BUT$,SG$,SA$,SB$,ZBI(),RSV(),H(),V(),CPL(),XB(),YB(),Z(),CUR(),HCR,VCR
  9. Global BBOULE,XT,YT,XH,YH,XR,YR,BCUR,HCURS,VCURS,XC,YC,XP,YP,CX,CY,SON()
  10. Global BCP,CYCLETAPE,ETAPE,QST,MXETAPE,DIFF,DERANN$,ELTEMPS,GAUCHE
  11. Global DUREE,VITESSE,BZN,MZ,ABANDON,RENOUV$,TSAB,TREN,LANGUE$,TEST$
  12. Global LIGNE,DIT,DIT0,GAM$(),PREF(),BOUTONS,BOUTONA,BOUTONB,FAITMUSE
  13. Global BOULBK,CRSBK,FLCHBK,CERVBK,BASEBLOCK,F$(),DC,DIT7,DIT8
  14. '
  15. '
  16. TEST$="Reflexes" : TEST=4 : INITEST : LESSIVE[0]
  17. '
  18. ''''''''''''''''''''''' Boucle de test ''''''''''''''''''''''''''''''' 
  19. While ETAPE<MXETAPE and Not ABANDON
  20.    PAUSEPOINTS : Exit If Param=3
  21.    VOISTEST
  22.    PTS=1-(DIFF=1) : METPOINTS
  23.    VITESSE=1000-10*DIFF : DUREE=2 : VIDCUR[1]
  24.    On QST Proc RELIES,ALIGNES,ENTREDEUX,AUDESSUS
  25.    On QST-4 Proc MEDAILLON,SOLITAIRE,DEFENETRE,AUTFENETRE
  26.    '
  27.    If PTS>0 Then BRUITB[1] : Wait 100
  28.    BRUIT[0,0,"tiroircaiss2"] : If BOUTONB and(PREF(4)=1) Then PREF(4)=0
  29.    GAUCHE[Screen,45] : LESSIVE[1] : If PTS<APTS Then DESTROYTOUT
  30.    FAITTOTAL
  31. Wend 
  32. RETOUR
  33. '                        Questions de REFLEXES   
  34. Procedure RELIES
  35.    Load "banqueI/F.Chemin"+Str$(DIFF)-" "+".abk" : Paste Icon 352-DC,15,1
  36.    B$="M.Robots" : If DIFF>3 Then B$="M.Cercles3"
  37.    BANQBI[B$,""]
  38.    TEMPS[0]
  39.    N=0 : For CX=1 To 2 : For CY=0 To 3
  40.          Inc N : H(N)=357-DC+140*(CX-1) : V(N)=8+46*CY
  41.          CUR(CX,CY,0)=H(N) : CUR(CX,CY,1)=V(N) : CUR(CX,CY,2)=BZN+N
  42.          HCR=Max(CX,HCR) : VCR=Max(CY,VCR)
  43.    Next : Next : NB=N
  44.    Gosub R_RELIES : PARLE["Joined",1] : INICURS[1,0]
  45.    TSAB=Timer+49
  46.    Do 
  47.    MULTIEXAM : If Param : Gosub R_RELIES : Else Exit : End If 
  48.    Loop 
  49.    Pop Proc
  50.    '
  51.    R_RELIES:
  52.    VIDE : For N=1 To NB : ZBI(N)=0 : Next 
  53.    TIRE[0] : N$=""
  54.    ' Met un bon couple
  55.    D=1+Rnd(3) : TIRE[NBK] : Restore "REL"+Str$(DIFF)-" "
  56.    If D>1 Then For X=1 To D-1 : Read N,N : Next 
  57.    For NBUT=1 To 2 : Read N : N$=N$+Str$(N)+" "
  58.       ZBI(N)=Param : BBUT(NBUT)=N : ZBUT(NBUT)=BZN+N
  59.    Next : NBUT=2
  60.    ' Met un faux couple  en ∩┐╜vitant qu'ils soient reli∩┐╜s
  61.    Repeat : D1=1+Rnd(3) : Until D1<>D : Restore "REL"+Str$(DIFF)-" "
  62.    If D1>1 Then For X=1 To D1-1 : Read N,N : Next 
  63.    Read N : N$=N$+Str$(N)+" " : Read N2 : N$=N$+Str$(N2)+" "
  64.    TIRE[NBK] : ZBI(N)=Param
  65.    Repeat : N=1+Rnd(NB-1) : Until Instr(N$,Str$(N)+" ")=0 : N$=N$+Str$(N)+" "
  66.    ZBI(N)=Param
  67.    ' Remplit le reste et place tout 
  68.    For X=1 To 4 : TIRE[NBK] : AFFECTE[1,NB,Param] : Next : PLACE
  69.    REL1: Data 1,2,3,5,4,6,7,8
  70.    REL2: Data 1,8,2,4,3,5,6,7
  71.    REL3: Data 1,7,2,5,3,6,4,8
  72.    REL4: Data 1,5,2,3,4,7,6,8
  73.    REL5: Data 1,8,2,7,3,6,4,5
  74.    REL6: Data 1,2,3,6,4,8,5,7
  75.    Return 
  76. End Proc
  77. Procedure ALIGNES
  78.    I=1 : T=2 : If DIFF>3 Then I=2 : T=3
  79.    Load "banqueI/alignes3.abk"
  80.    If DIFF>3
  81.       A$="banqueI/alignes4.abk"
  82.       If Exist(A$)
  83.          Erase 2 : Load A$
  84.    End If : End If 
  85.    Paste Icon 352-DC,0,1
  86.    BANQBI["B.small",""] : TEMPS[0]
  87.    H0=375-DC : DH=33 : V0=15 : DV=33 : DB=20
  88.    ' d∩┐╜finit les coordonn∩┐╜es du carr∩┐╜ de base 
  89.    N=0 : For Y=0 To T : For X=0 To T : Inc N : H(N)=H0+X*DH : V(N)=V0+Y*DV
  90.    Next : Next 
  91.    ' puis du pourtour 
  92.    CY=T+1 : For CX=1 To T+1 : Inc N : H(N)=H0+(CX-1)*DH : V(N)=DB+V0+CY*DV
  93.       CUR(CX,CY,0)=H(N)+10 : CUR(CX,CY,1)=V(N)+10 : CUR(CX,CY,2)=BZN+N
  94.       HCR=Max(CX,HCR) : VCR=Max(CY,VCR)
  95.    Next 
  96.    CX=T+2 : For CY=0 To T+1 : Inc N : H(N)=DB+H0+(CX-1)*DH : V(N)=V0+CY*DV
  97.       If CY=T+1 Then V(N)=DB+V0+DV*(T+1)
  98.       CUR(CX,CY,0)=H(N)+10 : CUR(CX,CY,1)=V(N)+10 : CUR(CX,CY,2)=BZN+N
  99.       HCR=Max(CX,HCR) : VCR=Max(CY,VCR)
  100.    Next : NB=N
  101.    ' NB=N+1 : H(NB)=DB+H0+(T+1)*DH : V(NB)=DB+V0+(T+1)*DV 
  102.    Gosub R_ALIGNES : PARLE["Same",1]
  103.    TSAB=Timer+49 : INICURS[T+2,T+1]
  104.    Do 
  105.    MULTIEXAM : If Param : Gosub R_ALIGNES : Else Exit : End If 
  106.    Loop 
  107.    Pop Proc
  108.    '
  109.    R_ALIGNES:
  110.    VIDE : CAVA=False : D=Sqr(NB)-1 : Repeat 
  111.       ' Met tout au hasard 
  112.       For N=1 To NB : ZBI(N)=37+Rnd(17) : Z(N)=1 : Next 
  113.       ' Regarde s'il y a du bon
  114.       For Y=0 To D-1 : For X=0 To D-1 : N=X+1+D*Y
  115.             P=D*D+1+X : If ZBI(N)=ZBI(P) Then Z(P)=0 : CAVA=True
  116.             P=D*D+D+1+Y : If ZBI(N)=ZBI(P) Then Z(P)=0 : CAVA=True
  117.             If X=Y and ZBI(N)=ZBI(NB) : Z(NB)=0 : CAVA=True : End If 
  118.       Next : Next 
  119.    Until CAVA=True
  120.    NBUT=0
  121.    For N=D*D+1 To NB
  122.       If Z(N)=0 : Inc NBUT : BBUT(NBUT)=N : ZBUT(NBUT)=BZN+N
  123.       End If 
  124.       Add ZBI(N),-18 : Rem Couleur diff∩┐╜rente 
  125.    Next : PLACE : Return 
  126. End Proc
  127. Procedure ENTREDEUX
  128.    Erase 1 : Erase 2
  129.    Load "banqueI/entredeux.abk" : Paste Icon 336-DC,0,1
  130.    B$="M.clowns" : If DIFF>3 : B$="K.Japideo" : End If 
  131.    BANQBI[B$,""] : TEMPS[0]
  132.    NBUT=2 : N=0
  133.    For CY=0 To 2 Step 2 : For CX=2 To 4
  134.          Inc N : H(N)=272-DC+50*CX : V(N)=5+45*CY
  135.          CUR(CX,CY,0)=H(N) : CUR(CX,CY,1)=V(N) : CUR(CX,CY,2)=BZN+N
  136.          HCR=Max(CX,HCR) : VCR=Max(CY,VCR)
  137.    Next : Next 
  138.    For CY=1 To 3 Step 2 : For CX=1 To 4
  139.          Inc N : H(N)=302-DC+50*CX : V(N)=5+45*CY
  140.          CUR(CX,CY,0)=H(N) : CUR(CX,CY,1)=V(N) : CUR(CX,CY,2)=BZN+N
  141.          HCR=Max(CX,HCR) : VCR=Max(CY,VCR)
  142.    Next : Next : NB=N : NBUT=2
  143.    Gosub R_ENTREDEUX : PARLE["Between",1] : INICURS[2,0]
  144.    TSAB=Timer+49
  145.    Do 
  146.    MULTIEXAM : If Param : Gosub R_ENTREDEUX : Else Exit : End If 
  147.    Loop 
  148.    Pop Proc
  149.    '
  150.    R_ENTREDEUX:
  151.    ENTRE: Data 2,9,6,9,6,14,1,8,5,8,5,13,7,4,12,1,2,3,7,8,9,8,9,10
  152.    Data 4,5,6,11,12,13,12,13,14,2,8,4,8,4,11,3,9,5,9,5,12,10,6,13
  153.    TIRE[0] : For N=1 To NB : ZBI(N)=0 : Next : Rem vide tout
  154.    Restore ENTRE : B=1+Rnd(6) : For X=1 To B : Read N,N,N : Next 
  155.    Read N1 : Read BBUT(1) : Read N2
  156.    TIRE[NBK] : ZBI(N1)=Param : ZBI(N2)=Param
  157.    TIRE[NBK] : ZBI(BBUT(1))=Param : ZBUT(1)=BZN+BBUT(1)
  158.    S$=Str$(N1)+Str$(N2)+Str$(BBUT(1))
  159.    Repeat : Read M1,BBUT(2),M2
  160.    Until Instr(S$,Str$(M1))+Instr(S$,Str$(M2))+Instr(S$,Str$(BBUT(2)))=0
  161.    TIRE[NBK] : ZBI(M1)=Param : ZBI(M2)=Param
  162.    TIRE[NBK] : ZBI(BBUT(2))=Param : ZBUT(2)=BZN+BBUT(2)
  163.    '
  164.    For N=7 To NB : TIRE[NBK] : AFFECTE[1,NB,Param] : Next 
  165.    PLACE : Return 
  166. End Proc
  167. Procedure AUDESSUS
  168.    BANQBI["F.reflex1",""] : Reserve Zone 38
  169.    H0=350-DC : DH=30 : V0=5 : DV=30
  170.    TAILLE=3 : If DIFF>3 Then TAILLE=4
  171.    ' d∩┐╜finit les coordonn∩┐╜es de la pyramide 
  172.    For CY=0 To 4 Step 2 : For CX=1 To TAILLE
  173.          Inc N : H(N)=H0+DH*(2*CX-2) : V(N)=V0+CY*DV
  174.          CUR(CX,CY,0)=H(N)+10 : CUR(CX,CY,1)=V(N)+10 : CUR(CX,CY,2)=BZN+N
  175.          HCR=Max(CX,HCR) : VCR=Max(CY,VCR)
  176.    Next : Next 
  177.    For CY=1 To 3 Step 2 : For CX=2 To TAILLE
  178.          Inc N : H(N)=H0+DH*(2*CX-3) : V(N)=V0+CY*DV
  179.          CUR(CX,CY,0)=H(N)+10 : CUR(CX,CY,1)=V(N)+10 : CUR(CX,CY,2)=BZN+N
  180.          HCR=Max(CX,HCR) : VCR=Max(CY,VCR)
  181.    Next : Next : NB=N
  182.    '
  183.    Gosub R_AUDESSUS : PARLE["Top",1] : INICURS[1,0] : TSAB=Timer+49
  184.    Do 
  185.    MULTIEXAM : If Param : Gosub R_AUDESSUS : Else Exit : End If 
  186.    Loop : Reserve Zone 
  187.    Pop Proc
  188.    '
  189.    R_AUDESSUS:
  190.    A1: Data 1,10
  191.    A2: Data 2,10,11
  192.    A3: Data 1,11
  193.    A4: Data 2,10,12
  194.    A5: Data 4,10,11,12,13
  195.    A6: Data 2,11,13
  196.    A7: Data 1,12
  197.    A8: Data 2,12,13
  198.    A9: Data 1,13
  199.    A10: Data 4,1,2,4,5
  200.    A11: Data 4,2,3,5,6
  201.    A12: Data 4,4,5,7,8
  202.    A13: Data 4,5,6,8,9
  203.    '
  204.    B1: Data 1,13
  205.    B2: Data 2,13,14
  206.    B3: Data 2,14,15
  207.    B4: Data 1,15
  208.    B5: Data 2,13,16
  209.    B6: Data 4,13,14,16,17
  210.    B7: Data 4,14,15,17,18
  211.    B8: Data 2,15,18
  212.    B9: Data 1,16
  213.    B10: Data 2,16,17
  214.    B11: Data 2,17,18
  215.    B12: Data 2,18
  216.    B13: Data 4,1,2,5,6
  217.    B14: Data 4,2,3,6,7
  218.    B15: Data 4,3,4,7,8
  219.    B16: Data 4,5,6,9,10
  220.    B17: Data 4,6,7,10,11
  221.    B18: Data 4,7,8,11,12
  222.    TIRE[0] : AJOUR : For X=0 To NB : ZBI(X)=0 : Next 
  223.    R$="A" : If DIFF>3 Then R$="B"
  224.    LESSIVE[1]
  225.    For N=1 To NB
  226.       TIRE[NB] : I=Param : H=H(I) : V=V(I) : ZBI(I)=1
  227.       Paste Bob H,V,1+Rnd(NBK-1) : Wait Vbl 
  228.       If N>1
  229.          Restore R$+Str$(I)-" " : Read S
  230.          For T=1 To S : Read U : ZBI(U)=0 : Next 
  231.       End If 
  232.    Next 
  233.    NBUT=0 : For N=1 To NB
  234.       If ZBI(N)>0 : Inc NBUT : BBUT(NBUT)=N : ZBUT(NBUT)=BZN+N : End If 
  235.    Next : INICURS[1,0] : Return 
  236. End Proc
  237. Procedure MEDAILLON
  238.    MED1: Data 8,0,0,0,1,0,2,1,0,1,1,1,2,2,0,2,1,2,2
  239.    MED2: Data 10,0,0,0,1,0,2,1,0,1,1,1,2,2,0,2,1,2,2,3,1,3,2
  240.    MED3: Data 12,0,0,0,1,0,2,1,0,1,1,1,2,1,3,2,0,2,1,2,2,2,3,3,1,3,2
  241.    MED4: Data 14,0,0,0,1,0,2,0,3,1,0,1,1,1,2,1,3,2,0,2,1,2,2,2,3,3,1,3,2,3,3
  242.    MED5: Data 15,0,0,0,1,0,2,0,3,1,0,1,1,1,2,1,3,2,0,2,1,2,2,2,3,3,0,3,1,3,2,3,3
  243.    Load "banqueI/medaillons.abk" : Paste Icon 352-DC,2,1
  244.    B$="B.chapeaux" : If DIFF>3 Then B$="K.cartes"
  245.    BANQBI[B$,""] : TEMPS[0]
  246.    Restore "MED"+Str$(DIFF)-" " : Read NB
  247.    Read X,Y : H(0)=(X*52)+365-DC : V(0)=Y*45+12
  248.    For N=1 To NB : Read X,CY : CX=X+1 : H(N)=(X*52)+378-DC : V(N)=CY*45+40
  249.       CUR(CX,CY,0)=H(N) : CUR(CX,CY,1)=V(N) : CUR(CX,CY,2)=BZN+N
  250.       HCR=Max(CX,HCR) : VCR=Max(CY,VCR)
  251.    Next 
  252.    '
  253.    Gosub R_MEDAILLON : INICURS[CX,CY] : PARLE["Circle",1]
  254.    TSAB=Timer+49
  255.    Do 
  256.    MULTIEXAM : If Param : Gosub R_MEDAILLON : Else Exit : End If 
  257.    Loop 
  258.    Pop Proc
  259.    '
  260.    '''''''''''''''''''  routine de renouvellement   ''''''''''''''''' 
  261.    R_MEDAILLON:
  262.    VIDE
  263.    NBUT=2+Rnd(1) : Rem Nombre d'images identiques au m∩┐╜daillon
  264.    For N=1 To NB : ZBI(N)=0 : Next : Rem Vide tout
  265.    '   Tire et pose le m∩┐╜daillon  
  266.    TIRE[0] : TIRE[NBK] : I=Param : Bob NB+1,H(0),V(0),I : Wait Vbl 
  267.    ' Reproduit NBUT fois et met en but
  268.    For X=1 To NBUT : BBUT(X)=I : AFFECTE[1,NB,I] : ZBUT(X)=BZN+Param
  269.    Next 
  270.    ' Fait NB-NBUT solitaires perdants, ∩┐╜ventuellement semblables entre eux
  271.    For B=NBUT+1 To NB
  272.       Repeat : I=1+Rnd(NBK-1) : Until Instr(SA$,Str$(I))=0
  273.    AFFECTE[1,NB,I] : Next 
  274.    PLACE : Return 
  275. End Proc
  276. Procedure SOLITAIRE
  277.    SOL1: Data 9,0,0,0,1,0,2,1,0,1,1,1,2,2,0,2,1,2,2
  278.    SOL2: Data 10,0,1,0,2,1,0,1,1,1,2,2,0,2,1,2,2,3,1,3,2
  279.    SOL3: Data 12,0,1,0,2,1,0,1,1,1,2,1,3,2,0,2,1,2,2,2,3,3,1,3,2
  280.    SOL4: Data 14,0,1,0,2,0,3,1,0,1,1,1,2,1,3,2,0,2,1,2,2,2,3,3,1,3,2,3,3
  281.    SOL5: Data 16,0,0,0,1,0,2,0,3,1,0,1,1,1,2,1,3,2,0,2,1,2,2,2,3,3,0,3,1,3,2,3,3
  282.    Erase 1
  283. If DIFF<4 : BANQBI["K.Jap",""] : Else BANQBI["K.Mahjong",""] : End If 
  284.    Restore "SOL"+Str$(DIFF)-" " : Read NB : NH=Int(NB/2)-1
  285.    NBUT=NB-2*NH
  286.    For N=1 To NB : Read X,CY : CX=X+1 : H(N)=(X*52)+354-DC : V(N)=CY*45+5
  287.       CUR(CX,CY,0)=H(N) : CUR(CX,CY,1)=V(N) : CUR(CX,CY,2)=BZN+N
  288.       HCR=Max(CX,HCR) : VCR=Max(CY,VCR)
  289.    Next 
  290.    Gosub R_SOLITAIRE : PARLE["NoTwin",1] : INICURS[1,1] : TSAB=Timer+49
  291.    Do 
  292.    MULTIEXAM : If Param : Gosub R_SOLITAIRE : Else Exit : End If 
  293.    Loop 
  294.    Pop Proc
  295.    '
  296.    R_SOLITAIRE:
  297.    For N=1 To NB : ZBI(N)=0 : Next : NH=(NB-NBUT)/2
  298.    '   Fait NH couples  
  299.    TIRE[0] : For B=1 To NH : TIRE[NBK] : I=Param : CPL(B,0)=I
  300.       For X=1 To 2 : AFFECTE[1,NB,I] : CPL(B,X)=Param : Next 
  301.    Next 
  302.    '   Fait NB-2*NH solitaires et les met en buts 
  303.    For B=1 To NBUT
  304.       TIRE[NBK] : I=Param : AFFECTE[1,NB,I] : BBUT(B)=I : ZBUT(B)=BZN+Param
  305.    Next 
  306.    PLACE : Return 
  307. End Proc
  308. Procedure DEFENETRE
  309.    ' Touchez les objets qui ne sont que dans un seul cadre
  310.    DEF1: Data 390,20,445,30,500,20,390,130,445,120,500,130
  311.    DEF2: Data 380,20,425,30,471,30,516,20,380,132,425,122,471,122,516,132
  312.    Erase 1 : Erase 2 : Load "banqueI/DeFenetre.abk" : Paste Icon 336-DC,2,1
  313.    B$="K.Japcercl" : If DIFF>3 Then B$="K.dedale"
  314.    BANQBI[B$,""] : NBUT=2
  315.    Restore DEF1 : NB=6 : CX1=3 : If DIFF>3 Then Restore DEF2 : NB=8 : CX1=4
  316.    N=0 : For CY=0 To 1 : For CX=1 To CX1
  317.          Inc N : Read H(N),V(N) : Add H(N),(-DC-20)
  318.          CUR(CX,CY,0)=H(N) : CUR(CX,CY,1)=V(N) : CUR(CX,CY,2)=BZN+N
  319.          HCR=Max(CX,HCR) : VCR=Max(CY,VCR)
  320.    Next : Next 
  321.    Gosub R_DEFENETRE : PARLE["OneFrame",1] : INICURS[1,0]
  322.    TSAB=Timer+49
  323.    Do 
  324.    MULTIEXAM : If Param : Gosub R_DEFENETRE : Else Exit : End If 
  325.    Loop 
  326.    Pop Proc
  327.    '
  328.    '''''''''''''''''  renouvellement  ''''''''''''''' 
  329.    R_DEFENETRE:
  330.    TIRE[0] : For N=1 To NB : ZBI(N)=0 : Next 
  331.    ' Met deux couples de part et d'autre
  332.    For X=1 To(NB-NBUT)/2
  333.       TIRE[NBK] : I=Param : AFFECTE[1,NB/2,I] : AFFECTE[1+NB/2,NB/2,I]
  334.    Next 
  335.    ' Met le reste en  intrus
  336.    For X=1 To NBUT
  337.       TIRE[NBK] : I=Param : AFFECTE[1+(X-1)*NB/2,NB/2,I]
  338.       ZBUT(X)=BZN+Param : BBUT(X)=I
  339.    Next 
  340.    '   Place toutes les images
  341.    PLACE : Return 
  342. End Proc
  343. Procedure AUTFENETRE
  344.    ' Touch the objects when they have two twins in the other frame
  345.    AUT1: Data 400,25,375,72,415,90,390,130,520,25,495,72,535,90,510,130
  346.    Erase 1 : Erase 2 : Load "banqueI/AutreFenetre.abk" : Paste Icon 330-DC,2,1
  347.    BANQBI["M.Afrique",""] : TEMPS[0] : NBUT=1
  348.    Restore AUT1 : NB=8 : N=0
  349.    For CX=1 To 2 : For CY=0 To 3 : Inc N
  350.          Read H(N),V(N) : Add H(N),(-18-DC)
  351.          CUR(CX,CY,0)=H(N) : CUR(CX,CY,1)=V(N) : CUR(CX,CY,2)=BZN+N
  352.          HCR=Max(CX,HCR) : VCR=Max(CY,VCR)
  353.    Next : Next 
  354.    Gosub R_AUTFENETRE : PARLE["OtherFrame",1] : INICURS[1,0]
  355.    TSAB=Timer+49
  356.    Do 
  357.    MULTIEXAM : If Param : Gosub R_AUTFENETRE : Else Exit : End If 
  358.    Loop 
  359.    Pop Proc
  360.    '''''''''''''''''  renouvellement  ''''''''''''''' 
  361.    R_AUTFENETRE:
  362.    For N=1 To NB : ZBI(N)=0 : Next : TIRE[0]
  363.    ' Met un objet/but d'une part et un couple identique de l'autre
  364.    TIRE[NBK] : I=Param : SIDE1=1+4*Rnd(1) : SIDE2=6-SIDE1
  365.    AFFECTE[SIDE1,4,I] : ZBUT(NBUT)=BZN+Param : BBUT(NBUT)=I
  366.    AFFECTE[SIDE2,4,I] : AFFECTE[SIDE2,4,I]
  367.    ' Met un couple diff∩┐╜rent en SIDE1 
  368.    TIRE[NBK] : I=Param : AFFECTE[SIDE1,4,I] : AFFECTE[SIDE1,4,I]
  369.    ' Comble le reste avec d'autres images 
  370.    TIRE[NBK] : AFFECTE[SIDE1,4,Param]
  371.    TIRE[NBK] : AFFECTE[SIDE2,4,Param]
  372.    TIRE[NBK] : AFFECTE[SIDE2,4,Param]
  373.    PLACE : Return 
  374. End Proc
  375. '
  376. Procedure LESSIVE[X]
  377.    If X=0
  378.       Get Cblock 3,529,0,58,25
  379.       Get Cblock 2,522,155,75,42
  380.    Else 
  381.       Bob Off : Bob Clear : Wait Vbl : Ink 41 : Bar 337-DC,0 To 572-DC,195
  382.       Update : Wait Vbl : Update Off 
  383.       For X=1 To 2
  384.          Bob Off : Bob Clear : Wait Vbl : Put Cblock 3,529-DC,0
  385.          Put Cblock 2,522-DC,155 : Bob Draw : Screen Swap : Wait Vbl 
  386.       Next 
  387.       Update On 
  388.    End If 
  389. End Proc
  390. Procedure MULTIEXAM
  391.    TREN=Timer+VITESSE : BUTSAFAIRE=NBUT : RENOU=False
  392.    Do 
  393.       CURSEUR[1] : If BOUTONB Then MZ=1
  394.       Exit If PTS>8 or PTS<1 or DUREE<1
  395.       If Not(BOUTONS) Then RENOU=True : Exit 
  396.       If MZ=1 Then CLIQUE[13] : PTS=0 : Exit : Rem Puis destroytout 
  397.       If MZ=2 : CLIQUE[14] : PARLE[DERANN$,1] : INICURS[CX,CY]
  398.       BOUTONS=False : End If 
  399.       If MZ=3 Then CLIQUE[15] : PTS=0 : ABANDON=True : Exit 
  400.       If BOUTONS : GAGNE=False
  401.          For B=1 To NBUT
  402.             If MZ=ZBUT(B) and BBUT(B)>0 : GAGNE=True : BBUT(B)=0 : Exit : End If 
  403.          Next 
  404.          TREN0=TREN-Timer
  405.          If GAGNE
  406.             Dec BUTSAFAIRE : BRUITB[100] : Inc PTS : METPOINTS
  407.             If PTS>8 : RENOU=False : Exit : End If 
  408.          Else 
  409.             TSAB0=TSAB-Timer : Dec PTS : METPOINTS : DESTROYPT
  410.             If PTS<1 : RENOU=False : Exit : End If 
  411.             TSAB=TSAB0+Timer
  412.          End If 
  413.          TREN=TREN0+Timer : While Mouse Key : Wend 
  414.       End If 
  415.       If(Timer>TREN) or(BUTSAFAIRE=0)
  416.          RENOU=True : Exit 
  417.       End If 
  418.    Loop 
  419. End Proc[RENOU]
  420. Procedure ALEAMUS[S]
  421.    If S=0 Then FAITMUSE=0 : Pop Proc : Rem erase 5
  422.    While Timer<DIT : Wend 
  423.    'D0$=Dir$
  424.    'Dir$=D0$+"MRsons/ressac/" 
  425.    'F$(1)=Dir$+Left$(Dir First$(Dir$),20)-" " : NB=1
  426.    'For N=2 To 20 
  427.    '   F$(N)=Dir$+Left$(Dir Next$,20)-" " : Exit If F$(N)=Dir$
  428.    '   Inc NB 
  429.    'Next  
  430.    'Dir$=D0$  
  431.    FAITMUSE=1 : Add DIT,150
  432.    'While Timer<DIT : Wend  
  433.    'FAITMUSE=1 : A$="mrsons/ressac/vent" : Bload A$,Start(6)
  434.    'Reserve As Chip Work 5,$FFFF : Bload "mrsons/ressac/vague",Start(5) 
  435.    'Add DIT,60 : DIT0=DIT+Rnd(60) 
  436. End Proc
  437. Procedure MUSE
  438.    If FAITMUSE=0 Then Volume %101,0 : Pop Proc
  439.    Data 14983,20000,23784
  440.    Restore : For X=1 To 1+Rnd(2) : Read F : Next 
  441.    If Rnd(10)<7
  442.       A$="vague"
  443.    Else 
  444.       A$="vent"
  445.    End If 
  446.    A$="mrsons/ressac/"+A$
  447.    Open In 1,A$ : L=Lof(1) : Close 1 : Bload A$,Start(6)
  448.    Volume %101,20+Rnd(43) : Sam Raw %101,Start(6)+104,L,F
  449.    DIT=Timer+50*(L/F)+Rnd(200)
  450. End Proc
  451. '
  452. '                          PROCEDURES GENERALES  
  453. '
  454. '
  455. Procedure INITEST
  456.    DC=0 : Rem nouvelles coordonn∩┐╜es / petit ∩┐╜cran
  457.    If Screen=7 : PRENDVAR
  458.    Else 
  459.       Load Iff "decors/"+Mid$(TEST$,1,2),0 : Double Buffer 
  460.       LANGUE$="Ang" : PREF(1)=1 : PREF(3)=2
  461.    End If 
  462.    Colour 0,0 : Colour Back 0 : Wait Vbl : View 
  463.    Hide On : Limit Mouse : MXETAPE=40 : CYCLETAPE=8 : GAUCHE=True : Curs Off 
  464.    XB(0)=280 : YB(0)=46 : Rem Suite
  465.    XB(1)=295 : YB(1)=63 : Rem Help 
  466.    XB(2)=278 : YB(2)=79 : Rem Encore 
  467.    BCUR=63 : Rem N∩┐╜ de bob du curseur 
  468.    XP=282 : YP=4 : APTS=0 : BBOULE=15 : Rem bob des points sur le boulier
  469.    XC=253 : YC=177 : Rem compteur d'∩┐╜tapes
  470.    XT=209 : YT=24 : Rem compteur du total
  471.    BOULBK=1 : CRSBK=2 : FLCHBK=3 : CERVBK=4 : BASEBLOCK=4 : Rem Blocks de base 
  472.    BZN=8
  473.    For X=1 To 15 : Erase X : Next 
  474.    Erase 7 : Reserve As Chip Work 7,7520 : Load "MRbruits/Brt0.sbk",7
  475.    '
  476.    BANQBI["",""]
  477.    '
  478.    ETAPE=0 : QST=ETAPE : DIFF=1 : ELTEMPS=100
  479.    '
  480.    ' Boulier des points par ∩┐╜cran    (Block BOULBK pour toutes les boules)    
  481.    Get Block BOULBK,25+XP-DC,5+YP,10,10,1
  482.    '
  483.    ' Compteur d'∩┐╜tapes     (Block CRSBK pour le curseur, initialis∩┐╜ ici)  
  484.    HCURS=XC-DC : VCURS=YC-3*ETAPE : Get Block CRSBK,HCURS,VCURS,22,17,1
  485.    Paste Icon HCURS,VCURS,12
  486.    '
  487.    ' Fl∩┐╜ches  (block FLCHBK, actualis∩┐╜ chaque fois) 
  488.    '
  489.    ' Difficult∩┐╜ (Block CERVBK actualis∩┐╜ chaque fois, initialis∩┐╜ ici)
  490.    AZDIF: Data 284,172,311,183
  491.    Data 285,161,314,172
  492.    Data 284,149,317,161
  493.    Data 285,133,321,149
  494.    Data 285,113,326,133
  495.    Restore AZDIF : Read H,V,H1,V1 : Add H,-DC : Add H1,-DC
  496.    Get Block CERVBK,H,V,H1-H,V1-V,1 : DIFF[0,DIFF]
  497.    Restore AZDIF
  498.    '
  499.    ' Plage de travail (Block 1, de type "c")
  500.    Get Cblock 1,0,0,8,2
  501.    TEMPS[0] : PARLE["Start",2]
  502. End Proc
  503. Procedure PAUSEPOINTS
  504.    BZDIF: Data 284,172,311,183,285,161,314,172,284,149,317,161
  505.    Data 285,133,321,149,285,113,326,133
  506.    ALEAMUS[1] : A=0 : CX=1 : CY=0
  507.    If(PREF(4)=0) or(ETAPE<1)
  508.       Repeat 
  509.          VIDCUR[0]
  510.          For I=0 To 2
  511.             CUR(1,I,0)=XB(I)-DC : CUR(1,I,1)=YB(I) : CUR(1,I,2)=I+1
  512.          Next 
  513.          Restore BZDIF : For Y=4 To 8
  514.             Read H,V,H1,V1 : Add H,-DC : Add H1,-DC
  515.          CUR(1,11-Y,0)=H : CUR(1,11-Y,1)=V : CUR(1,Y-1,2)=12-Y : Next 
  516.          CUR(0,2,0)=194-DC : CUR(0,2,1)=85 : CUR(0,2,2)=9
  517.          INICURS[CX,CY] : HCR=1 : VCR=7
  518.          CURSEUR[0] : A=Param : If BOUTONB : MZ=3 : End If 
  519.          If(A=27) or(MZ=2) : Rem pr∩┐╜sentations
  520.             ALEAMUS[0]
  521.             If MZ=2 : CLIQUE[14] : CX=1 : CY=1 : INICURS[CX,CY] : End If 
  522.             DEPLACE: Data 1,0,1,1,1,2,0,2,1,2,1,1,1,0,1,1,1,2,1,3
  523.             Bob BCUR,CUR(1,0,0),CUR(1,0,1), : Wait Vbl : PARLE["Arrows",2]
  524.             Restore DEPLACE : For X=1 To 10
  525.                Read H,V
  526.                BRUITB[3] : Bob BCUR,CUR(H,V,0),CUR(H,V,1), : Wait Vbl 
  527.                TEMPS=Timer+50
  528.                Repeat : K1=Mouse Key : Until Timer>TEMPS or K1>0
  529.                Exit If K1
  530.             Next 
  531.             If K1<1
  532.                PRESENTE: Data 1,0,"Advance",1,1,"Help",1,2,"Main"
  533.                Data 0,2,"Preferences"
  534.                Wait 50 : PARLE["select",2] : Wait 250 : Restore PRESENTE
  535.                For X=1 To 4
  536.                   Read H,V,A$ : Bob BCUR,CUR(H,V,0),CUR(H,V,1), : Wait Vbl 
  537.                   PARLE[A$,2]
  538.                   T=Timer+250 : Repeat : K2=Mouse Key : Until Timer>T or K2>0
  539.                   Exit If K2
  540.                Next 
  541.                If K2<1
  542.                   PARLE["Level",2] : Rem Amal Off 15 : Wait Vbl 
  543.                   For X=1 To 5 : Bob BCUR,CUR(1,8-X,0),CUR(1,8-X,1), : Wait Vbl 
  544.                      T=Timer+50
  545.                      Repeat : K3=Mouse Key : Until Timer>T or K3>0
  546.                      Exit If K3
  547.                      Bob BCUR,,,NBK+16 : Wait Vbl : Rem AJOUR : DIFF[X]
  548.                      'Bob BCUR,,,NBK+17 : Wait Vbl : Wait 40
  549.                   Next 
  550.                   If K3<1
  551.                      T=Timer+100
  552.                      Repeat : K=Mouse Key : Until Timer>T or K>0
  553.                   End If 
  554.                End If 
  555.                'DIFF[1] 
  556.             End If 
  557.             MZ=0 : INICURS[1,0] : ALEAMUS[1] : Wait 50
  558.          End If 
  559.          If A=43
  560.             ETAPE=Min(39,ETAPE+1) : ETAPE[ETAPE] : Inc QST : MZ=0
  561.          End If 
  562.          If A=45
  563.             ETAPE=Max(0,ETAPE-1) : ETAPE[ETAPE] : QST=Max(0,QST-1) : MZ=0
  564.          End If 
  565.          If 3<MZ and MZ<9
  566.             BRUITB[100] : Amal Off 15 : Bob BCUR,,,NBK+16 : AJOUR : DIFF[DIFF,MZ-3]
  567.          End If 
  568.          If MZ=9 : ALEAMUS[0] : BRUITB[50]
  569.             P=1 : If Screen=3 : P=2 : End If : PREFERENCES[P] : ALEAMUS[1]
  570.             MZ=0
  571.          End If 
  572.       Until(MZ=1) or(MZ=3) or BOUTONB
  573.    Else 
  574.       MZ=1
  575.    End If : ALEAMUS[0]
  576.    Wait 1+50*PREF(4) : Rem If(PREF(4)=1) and(ETAPE>0) Then MZ=1 
  577.    If MZ=1
  578.       ALEAMUS[0] : DIT=0
  579.       CLIQUE[13] : Inc ETAPE : Inc QST
  580.       If QST>CYCLETAPE
  581.          A=DIFF : QST=1 : DIFF=Min(DIFF+1,5) : DIFF[A,DIFF]
  582.       End If 
  583.       ETAPE[ETAPE] : TEMPS[0]
  584.    End If 
  585.    If(MZ=3) or BOUTONB Then CLIQUE[15]
  586.    Amal Off 15 : Bob Off BCUR : Bob Clear : AJOUR
  587. End Proc[MZ]
  588. Procedure INICURS[CX,CY]
  589.    Limit Mouse 
  590.    If Chanan(15) Then Bob BCUR,CUR(CX,CY,0),CUR(CX,CY,1), : Pop Proc
  591.    Channel 15 To Bob BCUR : Bob BCUR,CUR(CX,CY,0),CUR(CX,CY,1),NBK+17
  592.    Wait Vbl : Amal 15,"A 0,(R1,46)(R2,4)"
  593.    Amreg(15,1)=NBK+17 : Amreg(15,2)=NBK+18 : Amal On 15 : Clear Key 
  594. End Proc
  595. Procedure CURSEUR[C]
  596.    BOUTONA=False : BOUTONB=False : BOUTONS=False
  597.    Clear Key 
  598.    Repeat 
  599.       Repeat : T1=Timer+50
  600.          For X=1 To 10
  601.             X=X Mouse : Y=Y Mouse : Wait 3 : U=X Mouse : V=Y Mouse
  602.             Exit If X=U and Y=V
  603.          Next 
  604.          X Mouse=150 : Y Mouse=100 : MX0=X Mouse : MY0=Y Mouse : DM=0
  605.          Repeat 
  606.             If Timer>DIT Then MUSE
  607.             If C=1 : Rem En cours de question 
  608.                If Timer>TSAB : TEMPS[1] : TSAB=Timer+49 : End If 
  609.                If(PTS<1) or(DUREE<1) : MZ=0 : Exit 3 : End If 
  610.                If Timer>TREN : A=0 : Exit 3 : End If 
  611.             End If 
  612.             If C=2 : Rem En menu principal
  613.                If Timer>T1
  614.                   Restore "ETOILE"
  615.                   For X=1 To 1+Rnd(21) : Read A,B : Next 
  616.                   Bob 3,A,B, : Wait Vbl 
  617.                   T2=Timer+10+Rnd(20) : T1=T2+200
  618.                End If 
  619.                If Timer>T2
  620.                   Bob 3,-20,, : T1=Timer+50+50*Rnd(2) : T2=T1+200
  621.                End If 
  622.             End If 
  623.             MX=X Mouse : MY=Y Mouse : A$=Inkey$
  624.          Until A$<>"" or Mouse Key or Abs(MX0-MX)>DM or Abs(MY0-MY)>DM
  625.          K=Mouse Key : R=Asc(A$)
  626.          A=-28*(MX-MX0>DM)-29*(MX0-MX>DM)-30*(MY0-MY>DM)-31*(MY-MY0>DM)
  627.          If(R>27) and(R<32) Then A=R
  628.          X=CX : Y=CY
  629.          If(A=28) Then Add X,1
  630.          If(A=29) Then Add X,-1
  631.          If(A=30) Then Add Y,-1
  632.          If(A=31) Then Add Y,1
  633.       Until((X<0)+(Y<0)+(X>HCR)+(Y>VCR)=0)
  634.       If(X<>CX) or(Y<>CY)
  635.          If(CUR(X,Y,0)=0) and(CUR(X,Y,1)=0)
  636.             If(A=28) or(A=29)
  637.                Repeat : Add Y,-1,0 To VCR
  638.                Until((CUR(X,Y,0)<>0) or(CUR(X,Y,1)<>0))
  639.             End If 
  640.             If(A=30) or(A=31)
  641.                Repeat : Add X,1,0 To HCR
  642.                Until((CUR(X,Y,0)<>0) or(CUR(X,Y,1)<>0))
  643.             End If 
  644.          End If 
  645.          BRUITB[3] : CX=X : CY=Y : Bob BCUR,CUR(CX,CY,0),CUR(CX,CY,1),
  646.          Exit If C=2
  647.       End If 
  648.    Until(K>0)+(R=43)+(R=45)+(R=27)+(R=13)
  649.    MZ=CUR(CX,CY,2)
  650.    BOUTONS=(K>0)+(R=13) : BOUTONA=(K=1)+(K=3)+(R=13) : BOUTONB=(K>1)
  651. End Proc[R]
  652. Procedure VIDCUR[A]
  653.    For X=0 To 12 : For Y=0 To 9 : For Z=0 To 2 : CUR(X,Y,Z)=0
  654.    Next : Next : Next 
  655.    If A=1 : Rem situe les trois fl∩┐╜ches
  656.       For I=0 To 2 : CUR(0,I,0)=XB(I)-DC : CUR(0,I,1)=YB(I)
  657.       CUR(0,I,2)=I+1 : Next 
  658.       HCR=1 : VCR=2
  659.    End If 
  660. End Proc
  661. Procedure PARLE[A$,T]
  662.    If Length(6)<1 Then Reserve As Chip Work 6,$FFFF
  663.    If PREF(1)<1 Then Pop Proc
  664.    While Timer<DIT : Wend 
  665.    Volume %101,63 : DERANN$=A$
  666.    T$=TEST$ : If T=2 Then T$="General"
  667.    SEX$=Mid$("FM",1+Rnd(1),1) : If Instr("JapIta",LANGUE$) Then SEX$="F"
  668.    F$="Paroles/"+T$+"/"+LANGUE$+SEX$+"/"+A$
  669.    If Not Exist(F$) Then Pop Proc
  670.    Open In 1,F$ : L=Lof(1) : Close 1
  671.    If L>$FFFF Then Pop Proc
  672.    S6=Start(6) : Bload F$,S6 : Volume %101,63 : Sam Raw %101,104+S6,L,20000
  673.    DIT=Timer+(L/400)+20
  674.    If Exist(F$+Chr$(50))
  675.       While Timer<DIT : Wend : F$=F$+Chr$(50)
  676.       Open In 1,F$ : L=Lof(1) : Close 1
  677.       If L>64000 : Pop Proc : End If 
  678.       Bload F$,S6 : Sam Raw %101,104+S6,L,20000
  679.       DIT=Timer+(L/400)+20
  680.    End If 
  681.    If T=1 Then While Timer<DIT : Wend 
  682. End Proc
  683. Procedure BRUIT[F,V,A$]
  684.    If Length(6)<1 Then Reserve As Chip Work 6,$FFFF
  685.    If PREF(2) Then Pop Proc
  686.    While Timer<DIT : Wend 
  687.    S=20000 : If F<>0 Then S=1000*F
  688.    If L>65430 Then Pop Proc
  689.    Open In 1,"MRbruits/"+A$ : L=Lof(1) : Close 1
  690.    Bload "MRbruits/"+A$,Start(6)
  691.    Volume %1010,63 : If V<>0 Then Volume %1010,V
  692.    Sam Raw %1010,Start(6)+104,L,S : DIT=Timer+L/400
  693. End Proc
  694. Procedure BRUITB[N]
  695.    F=20000 : If N=100 Then N=3 : F=30000
  696.    If N=50 Then N=3 : F=10000
  697.    S0=Start(7) : S=Leek(S0+8*N) : L=Leek(S0+8*N+4)
  698.    Volume %1010,63 : Sam Raw %1010,S+S0+105,L-105,F : DIT7=Timer+L/400
  699. End Proc
  700. Procedure TEMPS[T]
  701.    ' Mettre sur la voix 
  702. If T=0 : TEMPS=DIFF-1 : Else BRUITB[2] : End If 
  703.    Inc TEMPS
  704.    If TEMPS>10
  705.       Dec PTS : METPOINTS : DESTROYPT : Dec DUREE
  706.       If DUREE<1 or PTS<1 : Pop Proc : End If 
  707.       TEMPS=DIFF
  708.    End If 
  709.    Paste Icon 578-DC,5,TEMPS+15 : Wait Vbl 
  710. End Proc
  711. Procedure CLIQUE[I]
  712.    Amal Off 1 : Bob Off BCUR : Bob Clear : AJOUR
  713.    BRUITB[50] : H=XB(I-13)-DC : V=YB(I-13)
  714.    Get Block FLCHBK,H,V,40,40,1 : Paste Icon H,V,I : While Mouse Key : Wend 
  715.    ABLOC[FLCHBK]
  716. End Proc
  717. Procedure AIDE
  718. End Proc
  719. Procedure ETAPE[ETAPE]
  720.    Update : Update Off : Wait Vbl 
  721.    Bob Clear : Put Block CRSBK,XC-DC, : Bob Draw : Screen Swap : Wait Vbl 
  722.    Bob Clear : Put Block CRSBK,XC-DC, : Bob Draw : Screen Swap : Wait Vbl 
  723.    Update On 
  724.    HCURS=XC-DC : VCURS=YC-3*ETAPE
  725.    Get Block CRSBK,HCURS,VCURS,22,17,1 : Paste Icon HCURS,VCURS,12
  726. End Proc
  727. Procedure DIFF[I1,I2]
  728.    ZD1: Data 284,172,311,183
  729.    ZD2: Data 285,161,314,172
  730.    ZD3: Data 284,149,317,161
  731.    ZD4: Data 285,133,321,149
  732.    ZD5: Data 285,113,326,133
  733.    If I1>0
  734.       Restore "ZD"+Str$(I1)-" " : Read H : Add H,-DC
  735.       Update : Update Off : Wait Vbl 
  736.       Bob Clear : Put Block CERVBK,H, : Bob Draw : Screen Swap : Wait Vbl 
  737.       Bob Clear : Put Block CERVBK,H, : Bob Draw : Screen Swap : Wait Vbl 
  738.       Update On 
  739.    End If 
  740.    I=Min(I2,5) : Restore "ZD"+Str$(I)-" " : Read H,V,H1,V1
  741.    Add H,-DC : Add H1,-DC
  742.    Get Block CERVBK,H,V,H1-H,V1-V,1 : Paste Icon H,V,6+I
  743.    DIFF=I
  744. End Proc
  745. Procedure FAITTOTAL
  746.    I=PTS : B=BBOULE
  747.    PT1: Data 25,5
  748.    PT2: Data 14,5
  749.    PT3: Data 3,5
  750.    PT4: Data 25,16
  751.    PT5: Data 14,16
  752.    PT6: Data 3,16
  753.    PT7: Data 25,27
  754.    PT8: Data 14,27
  755.    PT9: Data 3,27
  756.    If PTS>0
  757.       Amal Off : Bob Off : AJOUR
  758.       A$="A 1,(R2,7)(R3,1)(R4,1);M R0,0,5;M 0,R1,3;M -4,0,4"
  759.       For X=I To 1 Step -1
  760.          Dec PTS : METPOINTS : Inc TPTS(TEST)
  761.          Restore "PT"+Str$(PTS+1)-" " : Read H,V : H=XP+H-DC : V=YP+V
  762.          Dec B : Channel B To Bob B : Bob B,H,V,NBK+1 : Wait Vbl 
  763.          Amal B,A$
  764.          Amreg(B,0)=XT+55-H-DC : Amreg(B,1)=YT+4-V : Amreg(B,2)=NBK+1
  765.          Amreg(B,3)=NBK+15 : Amreg(B,4)=NBK+16
  766.          Amal On B
  767.          If X=I : Sam Loop On : BRUIT[0,0,"Bobloc"] : End If 
  768.          METTOTAL["+",TPTS(TEST),XT,YT] : Wait Vbl 
  769.       Next 
  770.       While Chanmv(B) : Wend 
  771.       Bob Off : Bob Clear : Sam Loop Off 
  772.    End If 
  773.    If PTS<0
  774.       PTS=0 : METPOINTS
  775.       TPTS(TEST)=Max(TPTS(TEST)-1,0) : METTOTAL["-",TPTS(TEST),XT,YT]
  776.    End If 
  777. End Proc
  778. Procedure METTOTAL[D$,N,X0,Y0]
  779.    If D$="+" or N>0
  780.       U=N mod 10 : N=(N-U)/10
  781.       If N>0
  782.          D=N mod 10 : N=(N-D)/10
  783.          If N>0
  784.             C=N mod 10
  785.          End If 
  786.       End If 
  787.       Paste Icon X0-DC,Y0,27+C : Wait Vbl 
  788.       Paste Icon X0+13-DC,Y0,27+D : Wait Vbl 
  789.       Paste Icon X0+26-DC,Y0,27+U : Wait Vbl 
  790.    Else 
  791.       Paste Icon X0,Y0,26
  792.       Paste Icon X0+13,Y0,26
  793.       Paste Icon X0+26,Y0,26 : Paste Icon X0+26,Y0,26
  794.    End If 
  795. End Proc
  796. Procedure METPOINTS
  797.    APT1: Data 25,5
  798.    APT2: Data 14,5
  799.    APT3: Data 3,5
  800.    APT4: Data 25,16
  801.    APT5: Data 14,16
  802.    APT6: Data 3,16
  803.    APT7: Data 25,27
  804.    APT8: Data 14,27
  805.    APT9: Data 3,27
  806.    If PTS<0 Then APTS=0 : Pop Proc
  807.    If PTS>APTS
  808.       For X=Max(1,APTS+1) To PTS
  809.          Restore "APT"+Str$(X)-" " : Read H,V : Paste Icon XP+H-DC,YP+V,1
  810.       Next 
  811.    Else 
  812.       For X=APTS To Max(PTS+1,1) Step -1
  813.          Restore "APT"+Str$(X)-" "
  814.          Read H,V : H=XP+H-DC : V=YP+V : AUTOBLOC[BOULBK,H,V]
  815.       Next 
  816.    End If 
  817.    APTS=PTS
  818. End Proc
  819. Procedure DESTROYPT
  820.    If PTS<0 Then Pop Proc
  821.    BPT1: Data 25,5
  822.    BPT2: Data 14,5
  823.    BPT3: Data 3,5
  824.    BPT4: Data 25,16
  825.    BPT5: Data 14,16
  826.    BPT6: Data 3,16
  827.    BPT7: Data 25,27
  828.    BPT8: Data 14,27
  829.    BPT9: Data 3,27
  830.    BRUITB[4] : Restore "BPT"+Str$(PTS+1)-" " : Read H,V
  831.    B=BBOULE-1 : Dec BBOULE : If BBOULE=12 Then BBOULE=15
  832.    BL=B+20
  833.    DSP$="A 1,(R1,R0)(R1+1,R0)(R1+2,R0)(R1+3,R0)(R1+4,R0)(R1+5,R0)(R2,1)"
  834.    DSP$=DSP$+";M 0,100,62"
  835.    Channel B To Bob BL : Bob BL,XP+H-DC,YP+V,NBK+3 : Wait Vbl : Amal B,DSP$
  836.    Amreg(B,0)=10 : Amreg(B,1)=NBK+3 : Amreg(B,2)=NBK+16 : Amal On B
  837.    While Chanmv(B) or Chanan(B) : Wend 
  838. End Proc
  839. Procedure DESTROYTOUT
  840.    Data 25,5,14,5,3,5,25,16,14,16,3,16,25,27,14,27,3,27
  841.    If APTS<1 Then Pop Proc
  842.    BRUIT[0,0,"perdu!"] : Bob Off : Bob Clear : Amal Off 
  843.    Restore : For P=1 To APTS : Read H,V
  844.    H(P)=XP+H-DC : V(P)=YP+V : AUTOBLOC[BOULBK,H(P),V(P)] : Next 
  845.    For P=1 To APTS : Bob P,H(P),V(P),NBK+3 : Wait Vbl : Next 
  846.    DSP$="A 1,(R1,R0)(R1+1,R0)(R1+2,R0)(R1+3,R0)(R1+4,R0)(R1+5,R0)(R1+13,1)"
  847.    DSP$=DSP$+";M 0,100,62"
  848.    For P=APTS To 1 Step -1
  849.       Channel P To Bob P : Bob P,H(P),V(P), : Wait Vbl 
  850.       Amal P,DSP$ : Amreg(P,0)=10 : Amreg(P,1)=NBK+3 : Amal On P
  851.    Next 
  852.    While Chanmv(1) or Chanan(1) : Wend : Wait Vbl : Wait 25
  853.    APTS=0 : PTS=0
  854. End Proc
  855. Procedure DROITE[E,D]
  856.    If Not(GAUCHE) Then Pop Proc
  857.    Amal Off : Wait Vbl 
  858.    Channel 1 To Screen Offset E : Screen E : Screen To Front E
  859.    Amal 1,"M 20,0,5;M R0,0,R1;M 20,0,5"
  860.    Amreg(1,0)=D : Amreg(1,1)=20 : If D<100 Then Amreg(1,1)=5
  861.    Amal On 1 : While Chanmv(1) : Wend : GAUCHE=False
  862. End Proc
  863. Procedure GAUCHE[E,D]
  864.    If GAUCHE Then Pop Proc
  865.    Amal Off : Wait Vbl 
  866.    Channel 1 To Screen Offset E : Screen E
  867.    Amal 1,"M -20,0,5 ;M R0,0,R1;M -20,0,5"
  868.    Amreg(1,0)=-D : Amreg(1,1)=20 : If D<100 Then Amreg(1,1)=5
  869.    Amal On 1 : While Chanmv(1) : Wend : GAUCHE=True
  870. End Proc
  871. Procedure DIAPHRAGME[A,B]
  872.    ' montre la moiti∩┐╜ gauche de B arrivant en diaphragme sur A
  873.    Autoback 0 : Screen To Front A
  874.    For X=1 To 59 Step 2
  875.       H0=170-X : H1=170+X : V0=128-X : V1=128+X
  876.       Screen Swap : Wait Vbl : Screen Copy B,H0,V0,H1,V1 To A,H0,V0
  877.    Next 
  878.    For X=60 To 130 Step 10
  879.       H0=170-X : H1=170+X : V0=128-X : V1=128+X
  880.       Screen Swap : Wait Vbl : Screen Copy B,H0,V0,H1,V1 To A,H0,V0
  881.    Next 
  882.    For X=131 To 176 Step 20
  883.       H0=170-X : H1=170+X : V0=0 : V1=260
  884.       Screen Swap : Wait Vbl : Screen Copy B,H0,V0,H1,V1 To A,H0,V0
  885.    Next 
  886.    Screen To Front B : Screen B : Rem Screen Close A 
  887. End Proc
  888. Procedure CLOCK[X,Y]
  889.    Change Mouse 3 : X Mouse=X : Y Mouse=Y : Show On 
  890. End Proc
  891. Procedure PASSECRAN[A$,E,F,G]
  892.    Screen Open 2,360,270,64,Lowres : Flash Off 
  893.    Get Palette E : Screen To Front E
  894.    Screen Copy E,0,0,360,270 To 2,0,0 : Screen Close E
  895.    Load Iff A$,F : Flash Off : Get Palette 2
  896.    Screen To Front 2 : Screen F
  897.    If G=1 Then Screen Close 2 : Double Buffer 
  898. End Proc
  899. Procedure BANQBI[B$,I$]
  900.    CLOCK[280,60] : Amal Off : Bob Off : AJOUR : Erase 1 : Erase 2
  901.    If B$=""
  902.       NBK=0 : Load "BanqueB/BoulesC.abk"
  903.    Else 
  904.       Load "BanqueB/"+B$+".abk" : NBK=Length(1) : Load "BanqueB/BoulesC.abk",1
  905.    End If 
  906.    Load "BanqueI/Ftdb.abk" : NBI=Length(2)
  907.    If I$<>"" Then Load "BanqueI/"+I$+".abk",2
  908.    Make Icon Mask : Hide On 
  909. End Proc
  910. Procedure PREFERENCES[CHOIX]
  911.    PRFV: Data "voice","sounds","language","speed","music"
  912.    PRF1: Data 0,0,6,0,10,7,1,"voice"
  913.    PRF2: Data 1,0,69,0,73,7,2,"sounds"
  914.    PRF3: Data 1,1,37,15,41,21,3,"Language"
  915.    PRF4: Data 0,2,6,30,13,35,8,"speed"
  916.    PRF5: Data 1,2,69,30,74,35,9,"music"
  917.    DRAPEAUX: Data 3,4,6,0,11,5,0,0,0,0,0,0,7
  918.    DIALECTES: Data "Ang","Ang","All","Fra","Esp","Ita","","","","","","","Jap"
  919.    SUITE_D_OPTIONS: Data 2,3,4,5,6,13,4,4,4,4,4,4,1
  920.    CLOCK[300,150] : B$="A.PeTdbacc" : BANQBI[B$,""] : ZB=Length(1)+1 : TB=10
  921.    ECR=Screen : ZCR=4
  922.    Screen Open ZCR,112,66,64,Lowres : Flash Off 
  923.    Screen ZCR : Flash Off : Get Palette ECR : Cls 0
  924.    Screen To Front ECR : Screen ZCR : Paste Bob 0,0,TB : Wait Vbl 
  925.    For X=1 To 5 : Restore "PRF"+Str$(X)-" "
  926.       Read A,B,C,D,E,F,Z
  927.       If X=3
  928.          Restore DRAPEAUX : For XX=1 To PREF(3) : Read Z : Next 
  929.          If Z=0 : Z=NBK+16 : End If : Paste Bob E,F,Z
  930.       Else 
  931.          If PREF(X) : Paste Bob E,F,Z : End If 
  932.       End If 
  933.    Next : Get Bob ZCR,ZB,0,0 To 111,63 : Screen ECR
  934.    PARLE["Choose",2] : Hide On 
  935.    If CHOIX=0 : H=40 : V=73
  936.       For Z=1 To 64 Step 2
  937.          ZZ=Min(2*Z,112) : Get Bob ZCR,ZB,0,0 To ZZ,Z : Bob 1,H,V,ZB : Wait Vbl 
  938.       Next 
  939.    Else 
  940.       Bob 1,400,10,ZB : Wait Vbl 
  941.       If CHOIX=1
  942.          Limit Bob 1,0,0 To 224,200
  943.          Channel 1 To Bob 1 : Bob 1,222,120, : Wait Vbl 
  944.          Amal 1,"M -112,0,28" : Amal On 1 : While Chanmv(1) : Wend 
  945.          H=110 : V=120
  946.       Else 
  947.          Limit Bob 1,158,0 To 400,200
  948.          Channel 1 To Bob 1 : Bob 1,36,120, : Wait Vbl 
  949.          Amal 1,"M 112,0,28" : Amal On 1 : While Chanmv(1) : Wend 
  950.          H=148 : V=120
  951.       End If 
  952.    End If 
  953.    VIDCUR[0]
  954.    For X=1 To 5 : Restore "PRF"+Str$(X)-" "
  955.       Read A,B,C,D,E,F,Z : Add E,H : Add F,V
  956.       If X=3
  957.          Restore DRAPEAUX : For XX=1 To PREF(3) : Read Z : Next 
  958.          If Z=0 : Z=NBK+16 : End If : Bob X+1,E,F,Z
  959.       Else 
  960.          If PREF(X)
  961.             Bob X+1,E,F,Z
  962.          Else 
  963.             Bob X+1,E,F,NBK+16
  964.          End If : Wait Vbl 
  965.       End If 
  966.    Next : Bob 1,,,TB : Wait Vbl 
  967.    '
  968.    '
  969.    VIDCUR[0] : K=0
  970.    For X=1 To 5 : Restore "PRF"+Str$(X)-" "
  971.       Read A,B,C,D,E,F,Z,P$ : Add C,H : Add D,V
  972.       CUR(A,B,0)=C : CUR(A,B,1)=D : CUR(A,B,2)=X : Z(X)=Z
  973.       If K<1
  974.          Bob BCUR,CUR(A,B,0),CUR(A,B,1),NBK+17 : Wait Vbl : PARLE[P$,2]
  975.          TEMPS=Timer+50 : Repeat : K=Mouse Key : Until Timer>TEMPS or K>1
  976.       End If 
  977.    Next 
  978.    While Mouse Key : Wend 
  979.    HCR=1 : VCR=2 : INICURS[1,1] : L$=LANGUE$
  980.    Do 
  981.       CURSEUR[0] : If BOUTONB Then MZ=0 : BOUTONB=False
  982.       Exit If MZ=0 or Not(BOUTONS)
  983.       If MZ=3
  984.          Restore SUITE_D_OPTIONS : For X=1 To PREF(3) : Read PREF(3) : Next 
  985.          Restore DIALECTES : For X=1 To PREF(3) : Read LANGUE$ : Next 
  986.          Restore DRAPEAUX : For X=1 To PREF(3) : Read Z : Next 
  987.          If Z=0 : Z=NBK+16 : End If 
  988.          Bob MZ+1,,,Z : Wait Vbl 
  989.       Else 
  990.          If PREF(MZ)
  991.             Bob MZ+1,,,NBK+16 : PREF(MZ)=0
  992.          Else 
  993.             Bob MZ+1,,,Z(MZ) : PREF(MZ)=1
  994.          End If 
  995.       End If : Wait Vbl 
  996.       Restore PRFV : For X=1 To MZ : Read P$ : Next : PARLE[P$,2]
  997.       While Mouse Key : Wend 
  998.    Loop 
  999.    FINDEPREF:
  1000.    AJOUR : BRUITB[100] : Amal Off 15 : Bob BCUR,,,NBK+16 : Wait Vbl 
  1001.    CX=1 : CY=0
  1002.    Screen ZCR : Paste Bob 0,0,TB
  1003.    For X=1 To 5 : Restore "PRF"+Str$(X)-" "
  1004.       Read A,B,C,D,E,F,Z
  1005.       If X=3
  1006.          Restore DRAPEAUX : For XX=1 To PREF(3) : Read Z : Next 
  1007.          If Z=0 : Z=NBK+16 : End If : Paste Bob E,F,Z
  1008.       Else 
  1009.          If PREF(X) : Paste Bob E,F,Z : End If 
  1010.       End If 
  1011.    Next 
  1012.    Get Bob ZCR,ZB,0,0 To 111,64 : Screen ECR : Bob 1,,,ZB : Wait Vbl 
  1013.    For X=2 To 6 : Bob X,,,NBK+16 : Next 
  1014.    If CHOIX=0 : Screen ZCR
  1015.       For Z=64 To 1 Step -4
  1016.          ZZ=Min(2*Z,112)
  1017.          Get Bob ZCR,ZB,0,0 To ZZ,Z : Screen ECR : Bob 1,40,73,ZB : Wait Vbl 
  1018.       Next 
  1019.       Bob 1,,,NBK+16 : Wait Vbl : Bob Off 1 : Wait Vbl 
  1020.    Else 
  1021.       Channel 1 To Bob 1 : Bob 1,,,Length(1) : Wait Vbl 
  1022.       If CHOIX=1
  1023.          Amal 1,"M 112,0,28" : Amal On 1 : While Chanmv(1) : Wend 
  1024.       Else 
  1025.          Amal 1,"M -112,0,28" : Amal On 1 : While Chanmv(1) : Wend 
  1026.       End If 
  1027.    End If : Screen Close ZCR
  1028.    Limit Bob : Amal Off : Bob Off : AJOUR : CLOCK[300,150]
  1029.    If L$<>LANGUE$
  1030.       If CHOIX=0
  1031.         A$="Decors/Entree"+LANGUE$ : PASSECRAN[A$,1,1,1]
  1032.       End If 
  1033.       If CHOIX=1
  1034.          Load "banqueI/Titror"+LANGUE$+".ABK" : Paste Icon 20,48,TEST
  1035.       End If 
  1036.    End If 
  1037.    BANQBI["",""]
  1038. End Proc
  1039. Procedure NETTOIE[BLK]
  1040.    Update : Wait Vbl : Update Off 
  1041.    Bob Off : Bob Clear : Put Cblock BLK : Bob Draw : Screen Swap : Wait Vbl 
  1042.    Bob Off : Bob Clear : Put Cblock BLK : Bob Draw : Screen Swap : Wait Vbl 
  1043.    Update On 
  1044. End Proc
  1045. Procedure AUTOBLOC[N,X,Y]
  1046.    Update : Update Off : Wait Vbl 
  1047.    Bob Clear : Put Block N,X,Y : Bob Draw : Screen Swap : Wait Vbl 
  1048.    Bob Clear : Put Block N,X,Y : Bob Draw : Screen Swap : Wait Vbl 
  1049.    Update On 
  1050. End Proc
  1051. Procedure ABLOC[N]
  1052.    Update : Update Off : Wait Vbl 
  1053.    Bob Clear : Put Block N : Bob Draw : Screen Swap : Wait Vbl 
  1054.    Bob Clear : Put Block N : Bob Draw : Screen Swap : Wait Vbl 
  1055.    Update On 
  1056. End Proc
  1057. Procedure AJOUR
  1058.    Update : Wait Vbl : Update : Wait Vbl 
  1059. End Proc
  1060. Procedure TIRE[M]
  1061.    If M=0 Then SA$="" : Pop Proc
  1062.    ' Tire un nombre parmi M et nouveau dans SA$     
  1063.    M=M-1 : Repeat : I=1+Rnd(M) : Until Instr(SA$,Str$(I)+" ")=0
  1064.    SA$=SA$+Str$(I)+" "
  1065. End Proc[I]
  1066. Procedure TIRB[M]
  1067.    If M=0 Then SB$="" : Pop Proc
  1068.    ' Tire un nombre parmi M et nouveau dans SB$     
  1069.    M=M-1 : Repeat : I=1+Rnd(M) : Until Instr(SB$,Str$(I)+" ")=0
  1070.    SB$=SB$+Str$(I)+" "
  1071. End Proc[I]
  1072. Procedure AFFECTE[DEB,NOMB,IMAGE]
  1073.    ' DEB : premier indice, NOMB : nombre total, premier compris 
  1074.    ' IMAGE: l'image ∩┐╜ affecter
  1075.    Repeat : N=DEB+Rnd(NOMB-1) : Until 0=ZBI(N) : ZBI(N)=IMAGE
  1076. End Proc[N]
  1077. Procedure VIDE
  1078.    Update : Bob Update Off : Wait Vbl 
  1079.    For N=1 To NB : Bob N,H(N),V(N),NBK+16 : Wait Vbl : Next 
  1080.    Update : Bob Update On 
  1081. End Proc
  1082. Procedure PLACE
  1083.    Update : Bob Update Off : Wait Vbl 
  1084.    For N=1 To NB : Bob N,H(N),V(N),ZBI(N) : Wait Vbl : Next 
  1085.    Update : Bob Update On 
  1086. End Proc
  1087. Procedure VOISTEST
  1088.    If(ETAPE>1) and(Screen=3)
  1089.       DROITE[3,45]
  1090.    Else 
  1091.       TPTS(TEST)=0 : METTOTAL["+",0,XT,YT] : DROITE[Screen,235] : DC=190
  1092.       S=Screen : Screen Open 3,450,270,64,Lowres : Flash Off : Get Palette S
  1093.       Screen To Front S : Screen Copy S,190,0,640,270 To 3,0,0
  1094.       Screen Offset 3,85,0 : Screen Close S : Double Buffer 
  1095.       Erase 7 : Reserve As Chip Work 7,65000
  1096.       A$="MRbruits/Brt4.sbk" : If Not(Exist(A$)) : A$="df0:Brt4.sbk" : End If 
  1097.       Load A$,7
  1098.    End If 
  1099. End Proc
  1100. Procedure POSEVAR
  1101.    Screen Open 7,32,10,16,Lowres : Flash Off : Screen Hide 7 : Screen 7
  1102.    For X=1 To 5 : Doke Phybase(0)+2*(X-1),PREF(X) : Next 
  1103.    For X=1 To 4 : Doke Phybase(0)+8+2*X,TPTS(X) : Next 
  1104. End Proc
  1105. Procedure PRENDVAR
  1106.    Screen Hide 7 : Screen 7
  1107.    For X=1 To 5 : PREF(X)=Deek(Phybase(0)+2*(X-1)) : Next 
  1108.    For X=1 To 4 : TPTS(X)=Deek(Phybase(0)+8+2*X) : Next 
  1109.    Data "Ang","Ang","All","Fra","Esp","Ita","","","","","","","Jap"
  1110.    Restore : For X=1 To PREF(3) : Read LANGUE$ : Next 
  1111.    Screen Close 7
  1112. End Proc
  1113. Procedure RETOUR
  1114.    Erase 1 : Erase 2 : Del Block : Del Cblock 
  1115.    S=Screen : Screen Open 2,360,270,64,Lowres : Flash Off 
  1116.    Get Palette S : Screen To Front S
  1117.    Screen Copy S,0,0,360,270 To 2,0,0 : Screen Close S
  1118.    CLOCK[280,60] : Load Iff "Decors/Entree"+LANGUE$,1
  1119.    Flash Off : Screen To Front 2
  1120.    Colour 0,0 : Colour Back 0 : Wait Vbl : View 
  1121.    Screen 2 : Autoback 0 : Screen To Front 2 : N=0 : D=2
  1122.    BRUIT[0,0,"antizoom"]
  1123.    For X=0 To 130 Step 1 : Repeat 
  1124.          H1=X : H2=X+D : H4=350-X : H3=H4-D
  1125.          V1=X : V2=X+D : V4=270-X : V3=V4-D
  1126.          Screen Copy 1,H1,V1,H4,V2 To 2,H1,V1
  1127.          Screen Copy 1,H3,V2,H4,V4 To 2,H3,V2
  1128.          Screen Copy 1,H1,V3,H3,V4 To 2,H1,V3
  1129.          Screen Copy 1,H1,V2,H2,V3 To 2,H1,V2
  1130.          Wait Vbl : Screen Swap : Inc N
  1131.    Until N>1 : Next 
  1132.    Screen Close 2
  1133.    Colour 0,0 : Colour Back 0 : Wait Vbl : View 
  1134.    POSEVAR : Screen 1 : A$="A48.amos" : If Exist("df0:"+A$) Then A$="DF0:"+A$
  1135.    Run A$
  1136. End Proc
  1137. Procedure XY
  1138.    X0=0 : Y0=0 : Change Mouse 1 : Show On : Limit Mouse : Curs Off 
  1139.    Repeat 
  1140.       X=X Screen(X Mouse) : Y=Y Screen(Y Mouse)
  1141.       If X<>X0 or Y<>Y0
  1142.          Locate 15,1 : Print X;"  " : Locate 15,2 : Print Y;"  "
  1143.          X0=X : Y0=Y
  1144.       End If 
  1145.       K$=Inkey$ : Exit If K$<>""
  1146.    Until Mouse Key
  1147. End Proc